//package com.freesky.web.manager.service.impl;
//
//import com.freesky.common.enums.EnumOrderStatus;
//import com.freesky.common.exception.EMallException;
//import com.freesky.common.pojo.DataTablesResult;
//import com.freesky.common.redis.IRedisTemplate;
//import com.freesky.common.utils.reponse.JSONResponse;
//import com.freesky.common.utils.reponse.JSONResponseDiretor;
//import com.freesky.common.dao.entity.VOOrder;
//import com.freesky.common.dao.entity.OrderItem;
//import com.freesky.common.dao.entity.OrderShipping;
//import com.freesky.common.dao.entity.Thanks;
//import com.freesky.web.manager.service.OrderService;
//import com.freesky.web.manager.util.EmailUtil;
//import com.freesky.web.manager.vo.VOOrderDetail;
//import com.baomidou.mybatisplus.mapper.EntityWrapper;
//import com.baomidou.mybatisplus.plugins.Page;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import java.math.BigDecimal;
//import java.text.ParseException;
//import java.text.SimpleDateFormat;
//import java.util.Date;
//import java.util.List;
//
///**
// * @author Freesky
// */
//@Service
//public class OrderServiceImpl implements OrderService {
//
//    @Autowired
//    private EmailUtil emailUtil;
//
//    @Autowired
//    private IRedisTemplate redisTemplate;
//
//    @Override
//    public DataTablesResult getOrderList(int draw, int start, int length, String vo, String orderCol, String orderDir) {
//
//        DataTablesResult result = new DataTablesResult();
//        //分页
//        boolean asc = false;
//        if (orderDir.equalsIgnoreCase("asc")) {
//            asc = true;
//        }
//        Page<VOOrder> orderPage = new VOOrder().selectPage(new Page<>(start / length + 1, length), new EntityWrapper<VOOrder>()
//                .like("order_id", vo).or()
//                .like("payment", vo).or()
//                .like("shipping_code", vo).or()
//                .like("user_id", vo).or()
//                .like("buyer_nick", vo).or()
//                .like("create_time", vo).or()
//                .like("update_time", vo).or()
//                .like("payment_time", vo).or()
//                .like("close_time", vo).or()
//                .like("end_time", vo).or()
//                .like("status", vo)
//                .orderBy(orderCol, asc));
//
//        result.setRecordsFiltered(orderPage.getTotal());
//        result.setRecordsTotal(orderPage.getSize());
//
//        result.setDraw(draw);
//        result.setData(orderPage.getRecords());
//        return result;
//    }
//
//    @Override
//    public Long countOrder() {
//        return Integer.valueOf(new VOOrder().selectCount(new EntityWrapper())).longValue();
//    }
//
//    @Override
//    public VOOrderDetail getOrderDetail(String orderId) {
//
//        VOOrderDetail voOrderDetail = new VOOrderDetail();
//        VOOrder order = new VOOrder(orderId);
//        order = order.selectById();
//
//
//        List<OrderItem> orderItemList = new OrderItem().selectList(new EntityWrapper().eq("order_id", orderId));
//
//        OrderShipping orderShipping = new OrderShipping(orderId);
//        orderShipping = orderShipping.selectById();
//
//        voOrderDetail.setOrder(order);
//        voOrderDetail.setOrderItem(orderItemList);
//        voOrderDetail.setOrderShipping(orderShipping);
//        return voOrderDetail;
//    }
//
//    @Override
//    public JSONResponse deliver(String orderId, String shippingName, String shippingCode, BigDecimal postFee) {
//        VOOrder order = new VOOrder(orderId);
//        order = order.selectById();
//
//        order.setShippingName(shippingName);
//        order.setShippingCode(shippingCode);
//        order.setPostFee(postFee);
//        order.setConsignTime(new Date());
//        order.setUpdateTime(new Date());
//        //之前忘记设置常量了 将就这样看吧 0、未付款，1、已付款，2、未发货，3、已发货，4、交易成功，5、交易关闭
//        order.setStatus(EnumOrderStatus.HAS_DELIVER.getCode());
//        order.updateById();
//        return JSONResponseDiretor.buildSuccessJSONResponse(null);
//    }
//
//    @Override
//    public JSONResponse remark(String orderId, String message) {
//        VOOrder o = new VOOrder(orderId);
//        o = o.selectById();
//        o.setBuyerMessage(message);
//        o.setUpdateTime(new Date());
//        o.updateById();
//        return JSONResponseDiretor.buildSuccessJSONResponse(null);
//    }
//
//    @Override
//    public JSONResponse cancelOrderByAdmin(String orderId) {
//
//        VOOrder o = new VOOrder(orderId);
//        o = o.selectById();
//        o.setCloseTime(new Date());
//        o.setUpdateTime(new Date());
//        //之前忘记设置常量了 将就这样看吧 0、未付款，1、已付款，2、未发货，3、已发货，4、交易成功，5、交易关闭
//        o.setStatus(5);
//        o.updateById();
//        return JSONResponseDiretor.buildSuccessJSONResponse(null);
//    }
//
//    @Override
//    public boolean deleteOrder(String id) {
//        VOOrder o = new VOOrder(id);
//        boolean delete = o.deleteById();
//        if (!delete) {
//            throw new EMallException("删除订单数失败");
//        }
//
//        List<OrderItem> list = new OrderItem().selectList(new EntityWrapper().eq("order_id", id));
//        for (OrderItem orderItem : list) {
//            boolean deleteOrderItem = orderItem.deleteById();
//            if (!deleteOrderItem) {
//                throw new EMallException("删除订单商品失败");
//            }
//        }
//        OrderShipping orderShipping = new OrderShipping(id);
//        boolean deleteOrderShipping = orderShipping.deleteById();
//        if (!deleteOrderShipping) {
//            throw new EMallException("删除物流失败");
//        }
//        return true;
//    }
//
//    @Override
//    public int cancelOrder() {
//
//        List<VOOrder> list = new VOOrder().selectAll();
//        for (VOOrder order : list) {
//            judgeOrder(order);
//        }
//        return 1;
//    }
//
//    /**
//     * 判断订单是否超时未支付
//     */
//    public String judgeOrder(VOOrder order) {
//
//        String result = null;
//        if (order.getStatus() == 0) {
//            //判断是否已超1天
//            long diff = System.currentTimeMillis() - order.getCreateTime().getTime();
//            long days = diff / (1000 * 60 * 60 * 24);
//            if (days >= 1) {
//                //设置失效
//                order.setStatus(EnumOrderStatus.DEAL_CLOSE.getCode());
//                order.setCloseTime(new Date());
//                boolean update = order.updateById();
//                if (!update) {
//                    throw new EMallException("设置订单关闭失败");
//                }
//            } else {
//                //返回到期时间
//                long time = order.getCreateTime().getTime() + 1000 * 60 * 60 * 24;
//                result = String.valueOf(time);
//            }
//        }
//        return result;
//    }
//
//    @Override
//    public int passPay(String tokenName, String token, String id) {
//
//        //验证token
//        if (StringUtils.isBlank(tokenName) || StringUtils.isBlank(tokenName) || StringUtils.isBlank(id)) {
//            return -1;
//        }
//        String value = redisTemplate.getCacheObject(tokenName, String.class);
//        if (!value.equals(token)) {
//            return -1;
//        }
//        //展示捐赠
//        Thanks thanks = new Thanks(Integer.valueOf(id));
//        thanks = thanks.selectById();
//        if (thanks == null) {
//            return 0;
//        }
//        thanks.setState(1);
//        boolean update = thanks.updateById();
//        if (!update) {
//            return 0;
//        }
//        //修改订单状态
//        VOOrder order = new VOOrder(thanks.getOrderId());
//        order = order.selectById();
//        if (order != null) {
//            order.setStatus(EnumOrderStatus.DEAL_SUCCESS.getCode());
//            order.setEndTime(new Date());
//            order.setUpdateTime(new Date());
//            boolean updateOrder = order.updateById();
//            if (!updateOrder) {
//                return 0;
//            }
//        }
//        //发送通知邮箱
//        if (StringUtils.isNotBlank(thanks.getEmail()) && EmailUtil.checkEmail(thanks.getEmail())) {
//            String content = "您的订单已支付成功，十分感谢您的捐赠！<br>您可以在捐赠名单中查看到您的数据：" +
//                    "<a href='http://xmall.Freesky.cn/#/thanks'>http://xmall.Freesky.cn/#/thanks</a><br>Powered By XPay. Freesky Present.";
//            emailUtil.sendEmailPayResult(thanks.getEmail(), "【XMall商城】支付捐赠成功通知", content);
//        }
//        return 1;
//    }
//
//    @Override
//    public int backPay(String tokenName, String token, String id) {
//
//        //验证token
//        if (StringUtils.isBlank(tokenName) || StringUtils.isBlank(tokenName) || StringUtils.isBlank(id)) {
//            return -1;
//        }
//        String value = redisTemplate.getCacheObject(tokenName, String.class);
//        if (!value.equals(token)) {
//            return -1;
//        }
//        //展示捐赠
//        Thanks thanks = new Thanks(Integer.valueOf(id));
//        thanks = thanks.selectById();
//        if (thanks == null) {
//            return 0;
//        }
//        thanks.setState(2);
//        boolean update = thanks.updateById();
//        if (!update) {
//            return 0;
//        }
//        //修改订单状态
//        VOOrder order = new VOOrder(thanks.getOrderId());
//        order = order.selectById();
//        if (order != null) {
//            order.setStatus(EnumOrderStatus.DEAL_FAIL.getCode());
//            order.setCloseTime(new Date());
//            order.setUpdateTime(new Date());
//            boolean updateOrder = order.updateById();
//            if (!updateOrder) {
//                return 0;
//            }
//        }
//        //发送通知邮箱
//        if (StringUtils.isNotBlank(thanks.getEmail()) && EmailUtil.checkEmail(thanks.getEmail())) {
//            String content = "抱歉，由于您支付不起或其他原因，您的订单支付失败，请尝试重新支付！<br>Powered By XPay. Freesky Present.";
//            emailUtil.sendEmailPayResult(thanks.getEmail(), "【XMall商城】支付失败通知", content);
//        }
//        return 1;
//    }
//
//    @Override
//    public int notShowPay(String tokenName, String token, String id) {
//
//        //验证token
//        if (StringUtils.isBlank(tokenName) || StringUtils.isBlank(tokenName) || StringUtils.isBlank(id)) {
//            return -1;
//        }
////        String value=jedisClient.get(tokenName);
//        String value = redisTemplate.getCacheObject(tokenName, String.class);
//        if (!value.equals(token)) {
//            return -1;
//        }
//        //展示捐赠
//        Thanks thanks = new Thanks(Integer.valueOf(id));
//        thanks = thanks.selectById();
//        if (thanks == null) {
//            return 0;
//        }
//        thanks.setState(3);
//        boolean update = thanks.updateById();
//        if (!update) {
//            return 0;
//        }
//        //修改订单状态
//        VOOrder order = new VOOrder(thanks.getOrderId());
//        order = order.selectById();
//        if (order != null) {
//            order.setStatus(EnumOrderStatus.DEAL_SUCCESS.getCode());
//            order.setEndTime(new Date());
//            order.setUpdateTime(new Date());
//            boolean updateOrder = order.updateById();
//            if (!updateOrder) {
//                return 0;
//            }
//        }
//        //发送通知邮箱
//        if (StringUtils.isNotBlank(thanks.getEmail()) && EmailUtil.checkEmail(thanks.getEmail())) {
//            String content = "您的订单已支付成功，十分感谢您的捐赠！<br>但由于您的支付金额过低或其他原因，将不会在捐赠名单中显示，敬请谅解！" +
//                    "<br>Powered By XPay. Freesky Present.";
//            emailUtil.sendEmailPayResult(thanks.getEmail(), "【XMall商城】支付捐赠成功通知", content);
//        }
//        return 1;
//    }
//
//    @Override
//    public int editPay(String tokenName, String token, Thanks thanks) {
//
//        //验证token
//        if (StringUtils.isBlank(tokenName) || StringUtils.isBlank(tokenName) || StringUtils.isBlank(thanks.getId().toString())) {
//            return -1;
//        }
////        String value=jedisClient.get(tokenName);
//        String value = redisTemplate.getCacheObject(tokenName, String.class);
//        if (!value.equals(token)) {
//            return -1;
//        }
//        //保存
//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        try {
//            Date date = sdf.parse(thanks.getTime());
//            thanks.setDate(date);
//        } catch (ParseException e) {
//            e.printStackTrace();
//        }
//        boolean update = thanks.updateById();
//        if (!update) {
//            return 0;
//        }
//        return 1;
//    }
//
//    @Override
//    public int payDelNotNotify(String tokenName, String token, String id) {
//
//        //验证token
//        if (StringUtils.isBlank(tokenName) || StringUtils.isBlank(tokenName) || StringUtils.isBlank(id)) {
//            return -1;
//        }
////        String value=jedisClient.get(tokenName);
//        String value = redisTemplate.getCacheObject(tokenName, String.class);
//        if (!value.equals(token)) {
//            return -1;
//        }
//        //获得捐赠
//        Thanks thanks = new Thanks(Integer.valueOf(id));
//        thanks = thanks.selectById();
//        if (thanks == null) {
//            return 0;
//        }
//        //删除捐赠
//        boolean delete = thanks.deleteById();
//        if (!delete) {
//            return 0;
//        }
//        //修改订单状态
//        VOOrder order = new VOOrder(thanks.getOrderId());
//        order = order.selectById();
//        if (order != null) {
//            order.setStatus(EnumOrderStatus.DEAL_FAIL.getCode());
//            order.setCloseTime(new Date());
//            order.setUpdateTime(new Date());
//            boolean update = order.updateById();
//            if (!update) {
//                return 0;
//            }
//        }
//        return 1;
//    }
//
//    @Override
//    public int payDel(String tokenName, String token, String id) {
//
//        //验证token
//        if (StringUtils.isBlank(tokenName) || StringUtils.isBlank(tokenName) || StringUtils.isBlank(id)) {
//            return -1;
//        }
////        String value=jedisClient.get(tokenName);
//        String value = redisTemplate.getCacheObject(tokenName, String.class);
//        if (!value.equals(token)) {
//            return -1;
//        }
//        //获得捐赠
//        Thanks thanks = new Thanks(Integer.valueOf(id));
//        thanks = thanks.selectById();
//        if (thanks == null) {
//            return 0;
//        }
//        //删除捐赠
//        boolean delete = thanks.deleteById();
//        if (!delete) {
//            return 0;
//        }
//        //修改订单状态
//        VOOrder order = new VOOrder(thanks.getOrderId());
//        if (order != null) {
//            order.setStatus(EnumOrderStatus.DEAL_FAIL.getCode());
//            order.setCloseTime(new Date());
//            order.setUpdateTime(new Date());
//            boolean update = order.updateById();
//            if (!update) {
//                return 0;
//            }
//        }
//        //发送通知邮箱
//        if (StringUtils.isNotBlank(thanks.getEmail()) && EmailUtil.checkEmail(thanks.getEmail())) {
//            String content = "抱歉，由于您支付不起或其他原因，您的订单支付失败，请尝试重新支付！<br>Powered By XPay. Freesky Present.";
//            emailUtil.sendEmailPayResult(thanks.getEmail(), "【XMall商城】支付失败通知", content);
//        }
//        return 1;
//    }
//
//}
